package com.zhoukx.nio;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * NIO 还提供了 MappedByteBuffer， 可以让文件直接在内存（堆外的内存）中进行修改， 而如何同步到文件由NIO 来完成. [举例说明]
 */
public class MappedByteBufferTest {
    public static void main(String[] args) throws IOException {
        RandomAccessFile randomAccessFile = new RandomAccessFile("1.txt", "rw");
        // 获取对应的通道
        FileChannel channel = randomAccessFile.getChannel();

        /**
         *
         * 参数1 : FileChannel.MapMode.READ_WRITE 使用的读写模式
         * 参数2  0: 可以直接修改的起始位置
         * 蚕食3 5 : 是映射到内存的大小,即1.txt的多少个字节可以映射到内存
         *   可以修改的范文是0 - 5
         */
        MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        map.put(0,(byte)'H');
        map.put(1,(byte)'9');

        randomAccessFile.close();
        System.out.println("修改完成");
    }
}
